#include <stdio.h>

void main()
{
    // 声明数组时，必须给出数组的大小
    // 未赋值的成员自动初始化为0。
    int arr[4] = {1, 2, 3};
    // 这种写法编译器会自动推断
    // int arr[] = {1, 2, 3};

    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        printf("%d\n", arr[i]);
    }

    // 1、普通数组
    int arr1[] = {1, 2, 3};
    // 数组定义当于  int* const arr1 = []; 无法赋值与修改，arr1相当于常量指针无法修改，只能通过下标修改
    // int arr2[1];
    // arr2 = arr1; 无法修改

    // 2、const 数组,数组的值不能被修改
    const int arr3[] = {1, 2, 3};
    // arr3[0] = 10; // error

    printf("-------------------------------\n");
    // 省略成员数量时，如果同时采用指定位置的赋值，那么数组长度将是最大的指定位置再加1
    int arr4[] = {[2] = 1};
    for (int i = 0; i < sizeof(arr4) / sizeof(arr4[0]); i++)
    {
        printf("%d\n", arr4[i]);
    }

    // 变长数组: 任何长度需要运行时才能确定的数组
    int num = 1;
    int arr[num];
    for (int i = 0; i < num; i++)
    {
        arr[i] = i;
        printf("%d\n", arr[i]);
    }
}